import { ITodoData } from "../types/typings";

class TodoEvent {
    // 创建一个静态属性
    private static instance: TodoEvent;
    private todoData: ITodoData[] = [];
    // 创建单例 只有一个实例
    public static create() {
        if (!TodoEvent.instance) {
            TodoEvent.instance = new TodoEvent();
        }
        return TodoEvent.instance; // 返回单例
    }

    public addTodo(todo:ITodoData):Promise<ITodoData> {
        return new Promise<ITodoData>((resolve, reject) => {
            // 先去重
            const _todo = this.todoData.find((item: ITodoData) => item.content === todo.content);
            if(_todo){
                alert("数据已存在!");
                return;
            }
            this.todoData.push(todo);
            resolve(todo); // dom操作中需要的数据传过去
        })
    }
    public removeTodo(id:number):Promise<number>{
        return new Promise<number>((resolve, reject) => {
            this.todoData = this.todoData.filter((item: ITodoData) => item.id !== id); // 返回id不等于传进来的id的数据
            resolve(id); // dom操作需要的id传过去
        })
    }
    public toggleTodo(id:number):Promise<number>{
        return new Promise<number>((resolve, reject) => {
            this.todoData = this.todoData.map((item: ITodoData)=>{
                if(item.id===id){
                    item.completed = ! item.completed; 
                    resolve(id); // dom操作需要的id传过去
                }
                return item;
            })
        })
    }
}
export default TodoEvent;